#include <stdio.h>
#include <stdlib.h>
#include "../src/item.h"
#include "../src/fisica.h"

void testaPolarParaEuclidiano(float dir, float vel, float vx, float vxEsperado, float vy, float vyEsperado);
void testaEuclidianoParaPolar(float vx, float vy, float dir, float dirEsperado, float vel, float velEsperado);
float modulo (float x);

int main(int argc, char *argv[]) {

    float vx, vy;
    float dir, vel;

    testaPolarParaEuclidiano(120.0, 2.0, vx, -1.0, vy, sqrt(3.0));
    testaPolarParaEuclidiano(0.0, 1.0, vx, 1.0, vy, 0.0);
    testaPolarParaEuclidiano(180.0, 1.0, vx, -1, vy, 0.0);
    testaPolarParaEuclidiano(90.0, 1.0, vx, 0.0, vy, 1.0);
    testaPolarParaEuclidiano(270.0, 1.0, vx, 0.0, vy, -1.0);

    testaEuclidianoParaPolar(1.0, sqrt(3.0), dir, 60.0, vel, 2.0);
    testaEuclidianoParaPolar(-1.0, sqrt(3.0), dir, 120.0, vel, 2.0);
    testaEuclidianoParaPolar(-1.0, -sqrt(3.0), dir, 240.0, vel, 2.0);
    testaEuclidianoParaPolar(1.0, -sqrt(3.0), dir, 300.0, vel, 2.0);
    testaEuclidianoParaPolar(2.0, 0.0, dir, 0.0, vel, 2.0);
    testaEuclidianoParaPolar(-2.0, 0.0, dir, 180.0, vel, 2.0);
    testaEuclidianoParaPolar(0.0, 2.0, dir, 90.0, vel, 2.0);
    testaEuclidianoParaPolar(0.0, -2.0, dir, 270.0, vel, 2.0);


    return 0;
}

void testaPolarParaEuclidiano(float dir, float vel, float vx, float vxEsperado, float vy, float vyEsperado){
        float diferencax, diferencay;
    polarParaEuclidiano(dir, vel, &vx, &vy);
    diferencax = modulo(vxEsperado - vx);
    diferencay = modulo(vyEsperado - vy);
    if(diferencax <= EPS && diferencay <= EPS) {
            printf("dir = %g, vel = %g  --->  vx = %g, vy = %g    OK\n", dir, vel, vx, vy);
    }
    else{
            printf("dir = %g, vel = %g  --->  vx = %g, vy = %g  ERRO\n", dir, vel, vx, vy);
    }       

}

void testaEuclidianoParaPolar(float vx, float vy, float dir, float dirEsperado, float vel, float velEsperado){
        float diferencax, diferencay;
    euclidianoParaPolar(vx, vy, &dir, &vel);
    diferencax = modulo(dirEsperado - dir);
    diferencay = modulo(velEsperado - vel);
    if(diferencax <= EPS && diferencay <= EPS) {
            printf("vx = %g, vy = %g  --->  dir = %g, vel = %g    OK\n", vx, vy, dir, vel);
    }
    else{
            printf("vx = %g, vy = %g  --->  dir = %g, vel = %g  ERRO\n", vx, vy, dir, vel);
    }       

}

float modulo (float x){
        if(x < 0) return -x;
        return x;

}
